home *** CD-ROM | disk | FTP | other *** search
/ Run Magazine ReRun 1989 Special Issue / rerun-1989-special-issue.d64 / irq source#3 < prev    next >
Text File  |  2022-09-20  |  5KB  |  127 lines

  1.  
  2.       *= $C000            ; Start address
  3.                           ; Ball Animation
  4.                           ; Interrupt demo
  5.       SEI                 ; Set Interrupt Disable Flag 
  6.       LDA #<NEWIRQ        ; Change IRQ RAM vector
  7.       STA $0314
  8.       LDA #>NEWIRQ
  9.       STA $0315
  10.       CLI                 ; Clear Interrupt Disable Flag
  11.       LDX #$10            ; Set Sprite Location Registers
  12.  ILOOP
  13.       LDA SP,X            ; ($D000-D010) set to initial values
  14.       STA $D000,X         ; From table SP 
  15.       DEX
  16.       BPL ILOOP
  17.       LDX #$07            ; Set Sprite Color Registers
  18.  CLOOP
  19.       LDA SC,X            ; ($D027-D02E) to values in table SC
  20.       STA $D027,X
  21.       LDA #$0B            ; and Sprite Pointers ($07F8-$07FF)
  22.       STA $07F8,X         ; to sprite block 11
  23.       DEX
  24.       BPL CLOOP
  25.       LDA #0              ; Initialize other VIC registers
  26.       STA $D017           ; X-expand
  27.       STA $D01C           ; Multicolor
  28.       STA $D01D           ; Y-expand
  29.       STA $D020           ; Border Color (Black)
  30.       STA $D021           ; Background Color (Black)
  31.       LDA #$FF
  32.       STA $D015           ; Sprite Enable Register
  33.       LDX #$3F            ; Put Sprite Data in Block 11
  34.                           ; ($02C0-$02FF)
  35. SLOOP
  36.       LDA BALL,X          ; Data in Table BALL
  37.       STA $02C0,X
  38.       DEX
  39.       BPL SLOOP
  40.       JSR EXP             ; (For further expansion)
  41.       RTS                 
  42. NEWIRQ
  43.       NOP                 ; (For further expansion)
  44.       NOP
  45.       NOP
  46. CONT
  47.      LDX #$0F             ; Set X to $0F - end of Sprite
  48.                           ; Position
  49. MLOOP
  50.      TXA                  ; Main loop - save bit 0
  51.                           ; (0=X value, 1=Y value)
  52.       LSR                 ; Put in Carry Flag
  53.       PHP                 ; Save Carry Flag
  54.       TAY                 ; Set Mask Bit for MSB register ($D010)
  55.       SEC
  56.       LDA #0
  57. BLOOP
  58.       ROL
  59.       DEY
  60.       BPL BLOOP
  61.       TAY                 ; Store Mask in Y register
  62.       PLP                 ; Retrieve Carry Flag (Bit 0)
  63.       LDA SD,X            ; Get direction of corresponding
  64.                           ; position register
  65.       BPL REGINC          ; If increasing, go to RECINC
  66.       DEC $D000,X         ; Decrease value of position register
  67.       BNE NEXT            ; If > 0 then do next register
  68.       BCS NEXT            ; If a Y-position, then do next
  69.                           ; register
  70.       TYA                 ; Get MSB register mask
  71.       EOR $D010           ; Toggle appropriate bit of MSB register
  72.       STA $D010
  73.       TYA                 ; Get MSB mask again
  74.       AND $D010           ; Test appropriate bit of MSB register
  75.       BEQ NEXT            ; If not set then do next register
  76.       LDA #$5B            ; Load A with $5B (91), Put in X position
  77.       STA $D000,X         ; Register if sprite wraps around
  78.                           ; left side 
  79.       JMP NEXT            ; Next register
  80. REGINC 
  81.       INC $D000,X         ; Increase value of position register
  82.       BCS NEXT            ; If a Y position, do next register
  83.       BNE CHECKX          ; If not 0 check right edge of screen
  84.       TYA                 ; Get mask bit
  85.       ORA $D010           ; Set MSB
  86.       STA $D010
  87.       JMP NEXT            ; Do next register
  88. CHECKX
  89.       LDA $D000,X         ; Get current X position
  90.       CMP #$5B            ; Compare to $5B (91)
  91.       BNE NEXT            ; If not 91 then do next register
  92.       TYA                 ; Get mask
  93.       AND $D010           ; Test MSB register
  94.       BEQ NEXT            ; If not at right edge, do
  95.                           ; next register
  96.       LDA #0              ; Put sprite at left edge
  97.       STA $D000,X
  98.       TYA
  99.       EOR $D010
  100.       STA $D010
  101. NEXT
  102.       DEX                 ; Decrement X - point to next position
  103.                           ; register
  104.       BPL MLOOP           ; If not done, do again
  105.       JMP $EA31           ; Go to KERNAL IRQ routine
  106. SP
  107.       .BYTE 155 90 205 95 255 130 250 175      ; Initial
  108.                                                ; positions
  109.       .BYTE 205 205 155 210 110 170 105 135 0
  110. SC
  111.       .BYTE 8 9 10 11 12 13 14 15              ; Sprite colors
  112. SD
  113.       .BYTE 0 128 128 0 128 128 128 0          ; Direction
  114.       .BYTE 0 0 128 128 0 128 0 0              ; 0=INC, 128=DEC
  115. BALL
  116.       .BYTE 0 0 0 1 255 128 7 31               ; Sprite Data
  117.       .BYTE 224 12 255 240 31 255 248 63
  118.       .BYTE 15 252 126 15 254 124 15 254
  119.       .BYTE 248 112 63 248 240 255 248 255
  120.       .BYTE 255 248 240 255 248 112 63 124
  121.       .BYTE 15 254 126 15 254 63 15 252
  122.       .BYTE 31 255 248 15 255 48 7 248
  123.       .BYTE 224 1 255 128 0 0 0 0
  124. EXP
  125.       RTS
  126.  
  127.